package com.example.hand.api.controller.v1;


import com.example.hand.domain.entity.User;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * ● GET：接口传入id参数，后端返回id*100后的结果
 * ● POST：接口传入{"name":"张三","sex":"男","age":18}，后端返回“张三，男性，18周岁”
 * ● PUT：接口传入{"name":"张三","sex":"男","age":18}，后端返回{"name":"张三","sex":"男","age":18,"mark":"已成年"}
 * ● DELETE： 接口传入{"name":"张三","sex":"男","age":18}，后端返回，“张三信息已删除”
 */

@RestController
@RequestMapping("/v1/lab1")
public class UserController {

    /**
     * 是Spring框架中用于封装HTTP响应的类，
     * 它继承了HttpEntity类，包含了HTTP响应码、响应头和响应体三个部分
     * ● OK (200)
     * ● CREATED (201)
     * ● ACCEPTED (202)
     * ● BAD_REQUEST (400)
     * ● UNAUTHORIZED (401)
     * ● FORBIDDEN (403)
     * ● NOT_FOUND (404)
     * ● INTERNAL_SERVER_ERROR (500)
     * 可以使用 ResponseEntity.status() 方法指定状态码：
     * return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("请求参数错误");
     */
    @GetMapping("/id")
    public ResponseEntity<?> get(@RequestParam("id") int id) {
        System.out.println("id为：" + id);
        return ResponseEntity.ok(id * 100);
    }

    /**
     *
     * ● consumes属性：用于指定处理请求时要使用的媒体类型。媒体类型指定了请求正文的格式。
     * 例如，如果请求正文是JSON格式，consumes属性应该设置为MediaType.APPLICATION_JSON_VALUE。
     *
     * ● produces属性：用于指定处理请求后要返回的媒体类型。媒体类型指定了响应正文的格式。
     * 例如，如果响应正文是JSON格式，produces属性应该设置为MediaType.APPLICATION_JSON_VALUE。
     */
    @PostMapping(value = "/post", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> post(@RequestBody User user) {
        System.out.println(user);
        // 创建一个 StringBuilder 对象
        StringBuilder result = new StringBuilder();
        // 将 user 对象的属性添加到 StringBuilder 中
        result.append(user.getName()).append("，").append(user.getSex()).append("，").append(user.getAge());
        return ResponseEntity.ok(result);
    }

    @PutMapping("/update")
    public ResponseEntity<?> update(@RequestBody User user) {
        System.out.println(user);
        user.setMark("已成年");
        return ResponseEntity.ok(user);
    }

    @DeleteMapping("/delete")
    public ResponseEntity<?> delete(@RequestBody User user, @RequestParam("id") int id) {
        String result = user.getName() + "信息已删除";
        return ResponseEntity.ok(result);
    }


    @PostMapping("/test")
    public ResponseEntity<?> test(@RequestBody Map<String, Object> params) {
        String name = (String) params.get("name");
        String sex = (String) params.get("sex");
        String age = (String) params.get("age");
        String result = name + "，" + sex + "性，" + age + "周岁";
        return ResponseEntity.ok (result);
    }


}
